Motivation

The flow around an infinite, circular cylinder is a well-studied, but yet not completely understood problem in CFD (computational fluid dynamics). A simple exploration of the steady and unsteady flow at low Reynolds numbers is undertaken here, to provide a light overview of the problem.

Implementation

We implement all simulation with OpenFoam, analysis with Paraview and Python3, and documentation code in R Xie, Dervieux, and Riederer (2020).

Mesh Assembly : Preliminaries

We assemble a set of preliminary meshes for simulations with Reynolds number 20 and 110, consisting of an inner cylindrical segment and outer rectangular segment as follows. The following mesh schematics list dimension parameters and block configuration, courtesy of Dr.Fabrizio Bisetti, UT Austin.

Mesh Schema

The blocks and block vertices are as follows. The blue vertices denote the other Z-plane.

The edges are defined by listing points \(P\) as follows.

A symmetry plane is defined in OpenFoam s.t. boundary effects do not significantly affect results. So the resulting simulation will look as below.

For all the meshes unless otherwise noted, the parameters are as follows, with units in meters for all dimensions on the diagram, and Re denoting the Reynolds number.

  • f : blockMeshFactor (decreases cell dimensions in each direction by this factor), set by default : int(max(10, Re/3))
  • R : cylinder radius, default: 1/2
  • R2 : ring block outer radius, default: 3/2
  • H : height, default: 4
  • F : forward distance, default: 4
  • W : wake (backward) distance, default: 4 + Re*(1/15)
  • K : +/- distance in Z-axis — mostly irrelevant for anything in this project, default: 4

The preliminary meshes run_20_1 and run_110_1 simply follow the default settings.

Mesh Files

BlockMeshDict files are available here: run_20_1 and run_110_1, blockMesh logs are available here: run_20_1 and run_110_1,
checkMesh logs are available here: run_20_1 and run_110_1.

Mesh Figures

Mesh images are shown here, for detail comparision. We will show the run_20_1 mesh first and then the run_110_1 mesh.

  • run_20_1:

  • run_110_1:

Preliminary Solutions

We assemble a set of preliminary solutions for Reynolds number 20 and 110 (the previous meshes). The Re=20 mesh will be shown first.
Three contour plots will be shown: \(\frac{u}{U}\), \(\frac{v}{U}\), \(\frac{p}{\rho U^2}\), along with a streamline plot.
For Re=110 (the unsteady case), a time history of \(\frac{u}{U}\), \(\frac{v}{U}\), \(\frac{p}{\rho U^2}\) at \((x,y)=(5.5,\pm0.5)\) versus normalized time \(\frac{t}{\frac{D}{U}}\).

Note data for a couple of points (about 0.1%) was imputed due to file errors.

  • run_20_1:

  • run_110_1:

Time History plots for run_110_1:

Mesh Improvement

We can see that the mesh extent is fairly adequate, except possibly the height (H) for Re=110. All boundary flow is not perturbed, with the exception of the aforementioned region. We can also see vortices for the Re=110 case, and the inner block does not cause any boundary issues, so we will make only the following minor changes to each mesh.

For the mesh run_20_1, we will increase the blockMeshFactor from 10 to 15 (so a block increase of ~2.25). This mesh will be called run_20_2.

For the mesh run_110_1, we will increase the blockMeshFactor from 36 to 45 (so a block increase of ~1.5625), and increase height (H) from 4 to 6. This mesh will be called run_110_2.

Mesh Files

Files for the new meshes are listed below.

BlockMeshDict files are available here: run_20_2 and run_110_2, blockMesh logs are available here: run_20_2 and run_110_2,
checkMesh logs are available here: run_20_2 and run_110_2.

Mesh Figures

Mesh images are shown here, for detail comparision. We will show the run_20_1 mesh first and then the run_110_1 mesh.

  • run_20_2:

  • run_110_2:

Solutions

The Re=20 mesh will be shown first.
The same three contour plots will be shown: \(\frac{u}{U}\), \(\frac{v}{U}\), \(\frac{p}{\rho U^2}\), along with a streamline plot.
For Re=110 (the unsteady case), a time history of \(\frac{u}{U}\), \(\frac{v}{U}\), \(\frac{p}{\rho U^2}\) at \((x,y)=(5.5,\pm0.5)\) versus normalized time \(\frac{t}{\frac{D}{U}}\).

  • run_20_2:

  • run_110_2:

Time History plots for run_110_2:

References

Allaire J, Xie Y, McPherson J, Luraschi J, Ushey K, Atkins A, Wickham H, Cheng J, Chang W, Iannone R (2021). Rmarkdown: Dynamic Documents for r. Retrieved from https://CRAN.R-project.org/package=rmarkdown
Bengtsson H (2021). R.utils: Various Programming Utilities. Retrieved from https://github.com/HenrikBengtsson/R.utils
Urbanek S (2021). Jpeg: Read and Write JPEG Images. Retrieved from http://www.rforge.net/jpeg/
Xie Y (2013). animation: An R Package for Creating Animations and Demonstrating Statistical Methods.” Journal of Statistical Software, 53(1), 1–27. Retrieved from https://doi.org/10.18637/jss.v053.i01
Xie Y (2014). “Knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing reproducible computational research, eds. V Stodden, F Leisch, and RD Peng,. Chapman; Hall/CRC. Retrieved from http://www.crcpress.com/product/isbn/9781466561595
Xie Y (2015). Dynamic Documents with R and Knitr 2nd ed. Chapman; Hall/CRC, Boca Raton, Florida. Retrieved from https://yihui.org/knitr/
Xie Y (2021a). Animation: A Gallery of Animations in Statistics and Utilities to Create Animations. Retrieved from https://yihui.org/animation/
Xie Y (2021b). Knitr: A General-Purpose Package for Dynamic Report Generation in r. Retrieved from https://yihui.org/knitr/
Xie Y, Allaire JJ, Grolemund G (2018). R Markdown: The Definitive Guide. Chapman; Hall/CRC, Boca Raton, Florida. Retrieved from https://bookdown.org/yihui/rmarkdown
Xie Y, Dervieux C, Riederer E (2020). R Markdown Cookbook. Chapman; Hall/CRC, Boca Raton, Florida. Retrieved from https://bookdown.org/yihui/rmarkdown-cookbook

Appendix

Thank you so much for reading this work!